package com.cosmoplat.xikai.business.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cosmoplat.xikai.business.domain.BaseDispatchTask;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cosmoplat.xikai.business.domain.ProductQualificationRate;
import com.cosmoplat.xikai.business.domain.dto.scada.DeviceFaultDto;
import com.cosmoplat.xikai.business.domain.mes.result.ActualProductionPlanning;
import com.cosmoplat.xikai.business.domain.vo.ProductTaskVo;
import com.cosmoplat.xikai.business.domain.vo.TaskForCreateProductVo;
import java.util.List;

/**
* @author 22047582
* @description 针对表【base_dispatch_task】的数据库操作Service
* @createDate 2025-01-07 13:51:30
*/
public interface BaseDispatchTaskService extends IService<BaseDispatchTask> {

    /**
     * 根据mes任务id获取任务信息
     * @param taskId
     * @return
     */
    BaseDispatchTask getByMesTaskId(String taskId);

    /**
     * 查询生产计划列表
     * @date 9:46 2025/1/9
     * @param queryDTO
     * @return java.util.List<com.cosmoplat.xikai.business.domain.vo.ProductTaskVo>
     **/
    List<ProductTaskVo> queryProductionPlanList(QueryWrapper queryDTO);

    /**
     * 根据任务id获取任务信息
     * @date 9:48 2025/1/9
     * @param taskId
     * @return com.cosmoplat.xikai.business.mapper.BaseDispatchTaskMapper
     **/
    BaseDispatchTask getByTaskId(String taskId);

    /**
     * 获取正在执行的任务
     * @date 10:09 2025/1/9
     * @return com.cosmoplat.xikai.business.domain.BaseDispatchTask
     **/
    BaseDispatchTask getDoingTask();

    /**
     * 根据任务号获取任务信息
     * @date 10:09 2025/1/9
     * @param taskNo
     * @return com.cosmoplat.xikai.business.domain.BaseDispatchTask
     **/
    BaseDispatchTask getByTaskNo(String taskNo);


    /**
     * 获取当前进的任务信息，用于创建产品
     * @date 14:03 2025/1/13
     * @return com.cosmoplat.xikai.business.domain.vo.TaskForCreateProductVo
     **/
    TaskForCreateProductVo getNowTaskForCreateProduct();

    /**
     * 产品完工，进行转序（移动到其他位置-通知mes）
     * @date 10:13 2025/1/15
     **/
    void productTransfer();

    /**
     * 任务完工，通知mes
     * @date 10:26 2025/1/15
     * @param doingTask
     **/
    void callMesFinishTask(BaseDispatchTask doingTask);


    /**
     * 获取派工单下面的全部任务列表
     * @date 10:37 2025/1/15
     * @param orderId
     * @return java.util.List<com.cosmoplat.xikai.business.domain.BaseDispatchTask>
     **/
    List<BaseDispatchTask> getTaskListByOrderId(String orderId);

    /**
     * 实际生产计划
     * @param deviceFaultDto
     * @return
     */

    ActualProductionPlanning actualProductionPlanning(DeviceFaultDto deviceFaultDto);

    /**
     * 获取最后完成的任务 (暂停，已完成，正在进行中最后更新的任务)
     * @date 13:55 2025/1/15
     * @return com.cosmoplat.xikai.business.domain.BaseDispatchTask
     **/
    BaseDispatchTask getLastTask();

    List<ProductQualificationRate> yieldAcquisition(DeviceFaultDto deviceFaultDto);
}
